WHERE 子句

发表于 2018-3-5 16:38:25 | 分类于 SQL |

WHERE 字句用于提取满足指定标准的记录。

语法

SELECT column_name,column_name 
FROM table_name
WHERE column_name operator value;

示例

样本数据库与 SELECT 字句 一章相同。

WHERE 字句示例

从 "Websites" 表中选取国家为 "CN" 的所有网站:

SELECT * FROM Websites WHERE country='CN';

输出结果:

mysql> SELECT * FROM Websites WHERE country='CN';

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
+----+--------------+---------------------------+-------+---------+

文本字段 vs. 数值字段

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。

在上个示例中 'CN' 文本字段使用了单引号。

如果是数值字段,请不要使用引号。

例子:

SELECT * FROM Websites WHERE id=1;

输出结果:

mysql> SELECT * FROM Websites WHERE id=1;

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
+----+--------------+---------------------------+-------+---------+

WHERE 字句中的运算符

运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

更多示例

Where 子句

示例 (1):

搜索 empno 等于 7900 的数据:

Select * from emp where empno=7900;

示例 (2):Where +条件(筛选行)

条件:列,比较运算符,值

比较运算符包涵:= > < >= ,<=, !=,<> 表示(不等于)

Select * from emp where ename='SMITH';

例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。

逻辑运算

示例

查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值。

Select * from emp where sal > 2000 and sal < 3000;

示例(2):Or(或),满足其中一个条件的值

查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值。

Select * from emp where sal > 2000 or comm > 500;

示例(3):Not(非),满足不包含该条件的值。

查询EMP表中 sal 小于等于 1500 的值。

select * from emp where not sal > 1500;

逻辑运算的优先级:

not > and  > or

###特殊条件

空值判断: is null

查询 emp 表中 comm 列中的空值。

Select * from emp where comm is null;

between and (在 之间的值)

查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。

Select * from emp where sal between 1500 and 3000;

注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。

In

查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

Select * from emp where sal in (5000,3000,1500);

like 模糊查询

查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

Select * from emp where ename like 'M%';
字符串 描述
% 表示多个字值,_ 下划线表示一个字符
M% 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的
%M% 表示查询包含M的所有内容
%M_ 表示查询以M在倒数第二位的所有内容

不带比较运算符的 WHERE 子句

WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。

当 0 时转化为 false,当其他值是转化为 true。

例如:

SELECT studentNO FROM student WHERE 0

则会返回一个空集,因为每一行记录 WHERE 都返回 false。 SELECT studentNO FROM student WHERE 1

或者

SELECT studentNO FROM student WHERE 'abc'

都将返回 student 表所有行记录的 studentNO 列。因为每一行记录 WHERE 都返回 true。